SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paObtenerNormas]
/*-- ACTUALIZADO : 26-04-2007 - se puso TOP 1 para consulta de Obtener Documento con un Nro. de Afiliado cuando tiene mas de una Afiliacion

@Documento INT = NULL,
@Afiliado INT = NULL,
@CUISE INT,
@FechaDesde VARCHAR(10) = NULL,
@FechaHasta VARCHAR(10) = NULL,
@SituacionRevista INT,
@Movimiento INT,
@SeImprimio INT

AS
SET NOCOUNT ON
SET DATEFORMAT dmy
IF @Afiliado <> -1
   SELECT @Documento = Ag.Documento FROM Tb_Agentes Ag WHERE Ag.IDAgente=(SELECT TOP 1 Af.IDAgente FROM Tb_Afiliaciones Af WHERE Af.NumeroAfiliado=@Afiliado)

IF @Movimiento = 1 or @Movimiento = 2
BEGIN
-- Normas de Altas y Bajas
SELECT SS.IdSubservicio, CASE WHEN @Movimiento=1 THEN S.FechaAlta ELSE S.FechaBaja END FechaAlta, SS.CUPOF, CASE WHEN @Movimiento=1 THEN S.NormaAlta ELSE S.NormaBaja END AS Norma,
	CASE WHEN @Movimiento=1 THEN SS.IdSubservicio ELSE S.IDServicioAgente END  AS ServiciooColaAfectada
	FROM vwSubServiciosAgentesSF SS 
		INNER JOIN vwServiciosAgentesSF S ON SS.ServicioAgente=S.IDServicioAgente
	WHERE @Movimiento IN (1,2) 
	  AND S.CUISE = @CUISE
	  AND ((@Movimiento=1 AND SS.FechaAlta = S.FechaAlta) OR (@Movimiento=2 AND SS.FechaBaja = S.FechaBaja))
               AND S.Documento=@Documento
               AND S.IdSituacionRevista=@SituacionRevista 
	  AND (CASE WHEN @Movimiento=1  THEN S.NormaAlta ELSE S.NormaBaja END) IS NOT NULL
	  AND (CASE WHEN @Movimiento=1  THEN S.NormaAlta ELSE S.NormaBaja END) <> ''
	  AND ((CASE WHEN @FechaDesde IS NOT NULL THEN (CASE WHEN @Movimiento=1 THEN S.FechaAlta ELSE S.FechaBaja END) END >=@FechaDesde) OR @FechaDesde IS NULL)
	  AND ((CASE WHEN @FechaHasta IS NOT NULL THEN (CASE WHEN @Movimiento=1 THEN S.FechaAlta ELSE S.FechaBaja END) END <=@FechaHasta) OR @FechaHasta IS NULL)
	 ORDER BY FechaAlta
END

IF @Movimiento = 3 or @Movimiento = 5
BEGIN
	-- Normas de Inicio y Fin de Licencias
	SELECT SS.IdSubservicio, CASE WHEN @Movimiento=3 THEN SS.FechaAlta ELSE SS.FechaBaja END FechaAlta, SS.CUPOF, CASE WHEN @Movimiento=3 THEN SS.NormaInicio ELSE SS.NormaFin END AS Norma,
		SS.IdSubservicio  AS ServiciooColaAfectada
		FROM vwSubServiciosAgentesSF SS 
			INNER JOIN vwServiciosAgentesSF S ON SS.ServicioAgente=S.IDServicioAgente
		WHERE @Movimiento IN (3,5) 
		  AND SS.CUISE = @CUISE
		  AND S.Documento=@Documento 
		  AND S.IdSituacionRevista=@SituacionRevista
		  AND SS.Licencia IS NOT NULL 	
		  AND (CASE WHEN @Movimiento=3  THEN SS.NormaInicio ELSE SS.NormaFin END) IS NOT NULL 
		  AND (CASE WHEN @Movimiento=3  THEN SS.NormaInicio ELSE SS.NormaFin END) <> ''
		  AND ((CASE WHEN @FechaDesde IS NOT NULL THEN (CASE WHEN @Movimiento=3 THEN SS.FechaAlta ELSE SS.FechaBaja END) END >=@FechaDesde) OR @FechaDesde IS NULL)
		  AND ((CASE WHEN @FechaHasta IS NOT NULL THEN (CASE WHEN @Movimiento=3 THEN SS.FechaAlta ELSE SS.FechaBaja END) END <=@FechaHasta) OR @FechaHasta IS NULL)
		ORDER BY FechaAlta
END

IF @Movimiento = 10
BEGIN
			-- Normas de Continuidades
			SELECT CM.IdCola AS IDSubservicio, CM.Fecha1 AS FechaAlta, Pl.CUPOF, Nr.Descripcion AS Norma,
				CM.IdCola AS ServiciooColaAfectada
				FROM Tb_PlazasDeMovimiento PM 
					INNER JOIN Tb_ColadeMovimientos CM ON PM.IdCola = CM.IdCola
					INNER JOIN Tb_Agentes Ag ON CM.Agente = Ag.IDAgente
				        INNER JOIN Tb_Normas Nr ON CM.NormaContinuidad = Nr.IdNorma
					INNER JOIN Tb_Plazas Pl ON PM.IdPlaza = Pl.IdPlaza
					INNER JOIN Tb_Organizaciones Org ON CM.Organizacion = Org.idOrganizaciones
				WHERE @Movimiento=10
				  AND Org.CUISE = @CUISE
				  AND CM.Movimiento=@Movimiento 
				  AND CM.Estado IN (4,5)
				  AND Ag.Documento=@Documento
				  AND CM.SitRev=@SituacionRevista 
				  AND ((CASE WHEN @FechaDesde IS NOT NULL THEN CM.Fecha1 END >=@FechaDesde) OR @FechaDesde IS NULL)
				  AND ((CASE WHEN @FechaHasta IS NOT NULL THEN CM.Fecha1 END <=@FechaHasta) OR @FechaHasta IS NULL)
				ORDER BY FechaAlta
END
*/

-- ACTUALIZADO : 26-04-2007 - se puso TOP 1 para consulta de Obtener Documento con un Nro. de Afiliado cuando tiene mas de una Afiliacion
-- 19/09/2010, Otero,Marcelo : Se optimizo la consulta en un 500%

@Documento INT = NULL,
@Afiliado INT = NULL,
@CUISE INT,
@FechaDesde VARCHAR(10) = null,
@FechaHasta VARCHAR(10) = null,
@SituacionRevista INT,
@Movimiento INT,
@SeImprimio INT

AS
SET NOCOUNT ON
SET DATEFORMAT dmy
IF @Afiliado <> -1
   SELECT @Documento = Ag.Documento FROM Tb_Agentes Ag WHERE Ag.IDAgente=(SELECT TOP 1 Af.IDAgente FROM Tb_Afiliaciones Af WHERE Af.NumeroAfiliado=@Afiliado)
   
DECLARE @Consulta varchar(5000)
/*if @Movimiento=4
	begin
		set @Consulta='SELECT SS.IdSubservicio, ss.FechaAlta,ss.CUPOF,s.normaalta AS Norma,SS.IdSubservicio  AS ServiciooColaAfectada
				FROM vwSubServiciosAgentesSF SS INNER JOIN vwServiciosAgentesSF S ON SS.ServicioAgente=S.IDServicioAgente
				WHERE  S.CUISE='+CONVERT(VARCHAR(5),@CUISE)+' AND S.Documento='+CONVERT(VARCHAR(10),@Documento)+
				' AND S.IdSituacionRevista='+CONVERT(VARCHAR(10),@SituacionRevista)+' and  ss.movimiento=4'
		goto salir
	end
*/	
if @movimiento=10
	begin
		SET @Consulta =  'SELECT CM.IdCola AS IDSubservicio, CM.Fecha1 AS FechaAlta, Pl.CUPOF, Nr.Descripcion AS Norma,
				CM.IdCola AS ServiciooColaAfectada
				FROM Tb_PlazasDeMovimiento PM 
					INNER JOIN Tb_ColadeMovimientos CM ON PM.IdCola = CM.IdCola
					INNER JOIN Tb_Agentes Ag ON CM.Agente = Ag.IDAgente
				        INNER JOIN Tb_Normas Nr ON CM.NormaContinuidad = Nr.IdNorma
					INNER JOIN Tb_Plazas Pl ON PM.IdPlaza = Pl.IdPlaza
					INNER JOIN Tb_Organizaciones Org ON CM.Organizacion = Org.idOrganizaciones
				WHERE Org.CUISE = '+CONVERT(VARCHAR(6),@CUISE)+'
				  AND CM.Movimiento='+CONVERT(VARCHAR(10),@movimiento)+'
				  AND CM.Estado IN (4,5)
				  AND Ag.Documento='+CONVERT(VARCHAR(10),@documento)+'
				  AND CM.SitRev='+CONVERT(VARCHAR(5),@SituacionRevista)
				  
			    if @FechaDesde is not null
					SET @Consulta = @Consulta + 'and  CM.Fecha1 >='+CONVERT(VARCHAR(10),@FechaDesde)
			    if @fechahasta is not null
					 SET @Consulta = @Consulta + 'and  CM.Fecha1<='+CONVERT(VARCHAR(10),@FechaHasta)
					 
			goto salir
				
	end
	
if @Movimiento=11 or @movimiento=4
    begin
	--set @Consulta='SELECT SS.IdSubservicio, ss.FechaAlta,ss.CUPOF,isnull(ss.normainicio,s.normaalta) AS Norma,SS.IdSubservicio  AS ServiciooColaAfectada
	--FROM vwSubServiciosAgentesSF SS 
	--	INNER JOIN vwServiciosAgentesSF S ON SS.ServicioAgente=S.IDServicioAgente
	--WHERE  S.CUISE='+CONVERT(VARCHAR(5),@CUISE)+' AND S.Documento='+CONVERT(VARCHAR(10),@Documento)+' AND S.IdSituacionRevista='+CONVERT(VARCHAR(10),@SituacionRevista)
	--+' and  
	--(( SS.FechaAlta = S.FechaAlta and S.NormaAlta is not null and s.NormaAlta <>'') or (SS.FechaBaja = S.FechaBaja and S.NormaBaja is not null and s.NormaBaja <>'')
	--or(SS.Licencia IS NOT NULL  and  SS.NormaInicio is not null and SS.NormaInicio <>'') or (SS.Licencia IS NOT NULL and SS.NormaFin is not null and SS.NormaFin <>''))'
	
	set @Consulta='SELECT null as IdSubservicio, null as FechaAlta, null as CUPOF,null as Norma, null  AS ServiciooColaAfectada
	--FROM vwSubServiciosAgentesSF  '
	goto salir
	ENd
	

SET @Consulta = 'SELECT SS.IdSubservicio,'
 If @Movimiento = 1
     SET @Consulta = @Consulta + 'S.FechaAlta as FechaAlta'
 If @Movimiento = 2
     SET @Consulta = @Consulta + 'S.FechaBaja as FechaAlta'  
 If @Movimiento = 3
     SET @Consulta = @Consulta + 'SS.FechaAlta as FechaAlta'
 If @Movimiento = 5
     SET @Consulta = @Consulta + 'SS.FechaBaja as FechaAlta' 
     
SET @Consulta = @Consulta +', SS.CUPOF,'

 If @Movimiento = 1
     SET @Consulta = @Consulta + 'S.NormaAlta AS Norma'
 If @Movimiento = 2
     SET @Consulta = @Consulta + 'S.NormaBaja AS Norma'
 If @Movimiento =3
     SET @Consulta = @Consulta + 'SS.NormaInicio AS Norma'
 If @Movimiento = 5
     SET @Consulta = @Consulta + 'SS.NormaFin AS Norma'

SET @Consulta = @Consulta +' ,SS.IdSubservicio  AS ServiciooColaAfectada
	FROM vwSubServiciosAgentesSF SS 
		INNER JOIN vwServiciosAgentesSF S ON SS.ServicioAgente=S.IDServicioAgente
	WHERE 1=1'

  SET @Consulta = @Consulta + ' AND S.CUISE='+CONVERT(VARCHAR(5),@CUISE)+' AND S.Documento='+CONVERT(VARCHAR(10),@Documento)+' AND S.IdSituacionRevista='+CONVERT(VARCHAR(10),@SituacionRevista)
  If @Movimiento = 1
     SET @Consulta = @Consulta + ' and SS.FechaAlta = S.FechaAlta and S.NormaAlta is not null and s.NormaAlta <>'''''
  If @Movimiento = 2
     SET @Consulta = @Consulta + ' and SS.FechaBaja = S.FechaBaja and S.NormaBaja is not null and s.NormaBaja <>'''''   
  If @Movimiento = 3
     SET @Consulta = @Consulta + ' and SS.Licencia IS NOT NULL  and  SS.NormaInicio is not null and SS.NormaInicio <>'''''
   If @Movimiento = 5
     SET @Consulta = @Consulta + ' and SS.Licencia IS NOT NULL and SS.NormaFin is not null and SS.NormaFin <>'''''

  if @FechaDesde is not null
     begin
      if @Movimiento in(1,2)
		 SET @Consulta = @Consulta + 'and  S.FechaAlta >='+CONVERT(VARCHAR(10),@FechaDesde)
	  if @Movimiento in(3,5)
		 SET @Consulta = @Consulta + 'and  SS.FechaAlta >='+CONVERT(VARCHAR(10),@FechaDesde)	 
	 end 

  if @FechaHasta  is not null
   begin
	 if @Movimiento in(1,2)
		 SET @Consulta = @Consulta + 'and  S.FechaBaja <='+CONVERT(VARCHAR(10),@FechaHasta)
	  if @Movimiento in(3,5)
        SET @Consulta = @Consulta + 'and  SS.FechaBaja <='+CONVERT(VARCHAR(10),@FechaHasta)
   end
 
salir:
         
SET @Consulta = @Consulta +'  ORDER BY 2 asc'

exec (@Consulta)
GO
GRANT EXECUTE ON  [dbo].[paObtenerNormas] TO [PersonalDocente]
GRANT EXECUTE ON  [dbo].[paObtenerNormas] TO [PersonalDocenteDireccion]
GO
